স্প্রিং বুট ORM ব্যবহার করার সময় ডেটাবেস সম্পর্কিত কোডের পরীক্ষার জন্য @DataJpaTest এবং @MockBean অ্যানোটেশন দুটি খুবই কার্যকরী। এগুলি স্প্রিং টেস্টিং ফ্রেমওয়ার্কের একটি অংশ, যা JPA রেপোজিটরি, সার্ভিস এবং ডেটাবেস লজিক পরীক্ষা করতে সহায়তা করে। এই টেস্টিং টেকনিকগুলি আপনাকে স্প্রিং বুট অ্যাপ্লিকেশন টেস্ট করতে সহজ উপায় প্রদান করে।
@DataJpaTest অ্যানোটেশন
@DataJpaTest অ্যানোটেশনটি স্প্রিং বুট টেস্টিংয়ের জন্য ব্যবহৃত হয়, যা শুধুমাত্র JPA রেপোজিটরির পরীক্ষা চালায়। এটি ডেটাবেস অপারেশনগুলো পরীক্ষা করার জন্য একটি বিশেষ টেস্ট কনফিগারেশন প্রস্তুত করে, যা ডেটাবেসের সাথে সম্পর্কিত কোডের পরীক্ষার ক্ষেত্রে খুবই কার্যকরী। এটি স্প্রিং কনটেক্সটকে হালকা রাখে এবং শুধু প্রয়োজনীয় কনফিগারেশনগুলো লোড করে, যেমন JPA রেপোজিটরির কোড এবং ডেটাবেস কনফিগারেশন।
@DataJpaTest এর ব্যবহার
এটি ডেটাবেসের সাথে ইন্টিগ্রেশন টেস্টিং করার জন্য ব্যবহার করা হয়, যেখানে স্প্রিং টেস্ট কনফিগারেশন শুধুমাত্র JPA এবং রেপোজিটরি সম্পর্কিত অংশগুলো লোড করবে এবং ডেটাবেসে প্রকৃত অপারেশন করবে না। এটি ডেটাবেসে প্রকৃত ডেটা ইনসার্ট করে টেস্টগুলি সম্পাদন করে।
@DataJpaTest
public class EmployeeRepositoryTest {
@Autowired
private EmployeeRepository employeeRepository;
@Test
public void testFindByName() {
Employee employee = new Employee("John", "Doe");
employeeRepository.save(employee);
Employee foundEmployee = employeeRepository.findByName("John");
assertNotNull(foundEmployee);
assertEquals("John", foundEmployee.getFirstName());
}
}
এখানে EmployeeRepositoryTest একটি টেস্ট ক্লাস, যেখানে @DataJpaTest অ্যানোটেশন ব্যবহার করা হয়েছে। এটি EmployeeRepository কে ইনজেক্ট করে এবং ডেটাবেসে একটি নতুন Employee সেভ করার পরে তা পরীক্ষা করা হয়েছে।
@MockBean অ্যানোটেশন
@MockBean অ্যানোটেশনটি স্প্রিং বুট টেস্টিংয়ে ব্যবহৃত হয়, যেখানে আপনি আপনার সার্ভিস ক্লাসের ডিপেনডেন্সি হিসেবে মক অবজেক্ট ইনজেক্ট করতে পারেন। এটি সাধারণত সার্ভিস লেয়ার এবং কন্ট্রোলার লেয়ারের টেস্টিংয়ে ব্যবহৃত হয়, যেখানে ডেটাবেসে প্রকৃত অপারেশন করার প্রয়োজন নেই।
@MockBean এর ব্যবহার
@MockBean অ্যানোটেশনটি মক সার্ভিস বা রেপোজিটরি তৈরি করে এবং আপনার টেস্ট ক্লাসে ইনজেক্ট করে। এতে স্প্রিং কনটেক্সটের মধ্যে ওই মক অবজেক্ট ব্যবহৃত হয়, তবে এটি মূল ডেটাবেসে পরিবর্তন বা সেভ করবে না।
@RunWith(SpringRunner.class)
@SpringBootTest
public class EmployeeServiceTest {
@MockBean
private EmployeeRepository employeeRepository;
@Autowired
private EmployeeService employeeService;
@Test
public void testGetEmployeeByName() {
Employee mockEmployee = new Employee("John", "Doe");
Mockito.when(employeeRepository.findByName("John")).thenReturn(mockEmployee);
Employee employee = employeeService.getEmployeeByName("John");
assertNotNull(employee);
assertEquals("John", employee.getFirstName());
}
}
এখানে @MockBean ব্যবহার করে EmployeeRepository কে মক করা হয়েছে, যাতে স্প্রিং কনটেক্সটে মক অবজেক্ট ইনজেক্ট করা হয়। Mockito.when() ব্যবহার করে findByName মেথডের জন্য একটি মক ভ্যালু রিটার্ন করা হয়েছে, এবং employeeService.getEmployeeByName() কল করার সময় প্রকৃত ডেটাবেস অপারেশন না করে মক ডেটা রিটার্ন হয়েছে।
@DataJpaTest এবং @MockBean এর মধ্যে পার্থক্য
- @DataJpaTest শুধুমাত্র JPA সম্পর্কিত কোড পরীক্ষা করার জন্য ব্যবহৃত হয়, যেখানে প্রকৃত ডেটাবেস অপারেশন করা হয়। এটি ডেটাবেসের টেবিলের সাথে একত্রে কাজ করে।
- @MockBean সার্ভিস বা রেপোজিটরি ক্লাসের মক অবজেক্ট তৈরি করে এবং পরীক্ষার জন্য ইনজেক্ট করা হয়, তবে এটি প্রকৃত ডেটাবেসের সঙ্গে কাজ করে না এবং কোনো ডেটা পরিবর্তন বা সেভ করে না।
টেস্টিংয়ের জন্য উপকারী টিপস
@DataJpaTestব্যবহার করার সময় টেস্ট ডেটাবেস ব্যবহৃত হয়, তাই টেস্ট ফাইলগুলি হালনাগাদ থাকতে হবে এবং টেস্টের শেষে ডেটাবেস পরিষ্কার করা উচিত।@MockBeanব্যবহার করার সময় এটি কেবলমাত্র সার্ভিস এবং কন্ট্রোলার লেয়ার টেস্ট করতে কার্যকরী, যেখানে ডেটাবেস ইন্টারঅ্যাকশন না করা উচিত।
স্প্রিং বুট ORM টেস্টিংয়ের জন্য @DataJpaTest এবং @MockBean খুবই গুরুত্বপূর্ণ টুলস, যা ডেটাবেস ইন্টিগ্রেশন টেস্টিং এবং সার্ভিস লেয়ার টেস্টিংয়ে ব্যবহার করা হয়। এগুলি ডেটাবেস অপারেশনগুলো মক বা প্রকৃত ডেটাবেসের মাধ্যমে পরীক্ষা করতে সাহায্য করে।
Read more